/**
 * Copyright (c) 2011, www.quartzsource.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.quartzsource.core

import scala.collection.mutable.ArrayBuffer

object Util {

  class Sha1(val md: java.security.MessageDigest) {
    var finished = false
    def this(s: Binary) {
      this(java.security.MessageDigest.getInstance("SHA1"))
      md.update(s.toArray)
    }

    def update(s: Binary) {
      require(!finished)
      md.update(s.toArray)
    }

    def update(s: String) {
      require(!finished)
      md.update(s.getBytes("UTF-8"))
    }

    def digest: Binary = {
      require(!finished)
      val value = md.digest
      finished = true
      Binary(value)
    }

    def copy: Sha1 = {
      try {
        new Sha1(md.clone.asInstanceOf[java.security.MessageDigest])
      } catch {
        case e: CloneNotSupportedException =>
          throw new QuartzException(e.getMessage())
      }
    }
  }
}

